
#include <malloc.h>
#include "strSplit.h"

char** strSplit(char const *str, char ch)
{
    char **res;//存放结果
    char const* str1 = &str[0];//由于要遍历两次，所以先记录第一个元素位置
    int i = 0;//用于计算出现次数
    while (*str != '\0')
    {
        if (*str == ch)
        {
            i++;
        }
        str++;
    }//i为出现的次数
    if (i == 0)
    {
        return nullptr;
    }
    res = (char**)malloc(sizeof(char*)*(i + 1));//分配二维数组行数，都按n+1计算，如果字符出现在第一个则返回的第一行为空
    int len = 0;//每一个字符的长度
    char buf[100];//临时存储字符的数组
    i = 0;
    while (*str1 != '\0')
    {
        if (*str1 == ch)//若没有碰到相同字符则一直向buf里面放置，
        {//如果碰到，则先分配空间，然后把buf放进里面，再加上\0
            buf[len] = '\0';
            res[i] = (char*)malloc(sizeof(char)*(len + 1));
            int k = 0;
            while (buf[k] != '\0')
            {
                res[i][k] = buf[k];
                k++;
            }
            res[i][k] = '\0';
            len = 0;
            i++;
        }
        else
        {
            buf[len++] = *str1;
        }
        str1++;
    }
    res[i] = (char*)malloc(sizeof(char)*(len + 1));
    int k = 0;
    while (buf[k] != '\0')
    {
        res[i][k] = buf[k];
        k++;
    }
    res[i][k] = '\0';
    return res;
}